import { Queue } from "../queue/queue";

export class Stack {
  constructor() {
    this.items = []
  }
  //push(element) 添加一个新的元素到栈顶位置
  push(element) {
    this.items.push(element);
  }
  //pop() 移除栈顶的元素，同时返回被移除的元素(出栈)       pop() 方法用于删除并返回数组的最后一个元素。
  pop() {
    return this.items.pop();
  }
  //peek() 返回栈顶元素，不对栈做任何修改（这个方法不会移除栈顶的元素，仅仅返回它）
  peek() {

    if(this.isEmpty()) return null
    return this.items[this.items.length - 1];
  }
  //isEmpty() 如果栈里没有任何元素就返回true,否则返回false
  isEmpty() {
    return this.items.length === 0;
  }
  //size() 返回栈元素的个数
  size() {
    return this.items.length;
  }
}

//十进制转二进制
export function dec2bin(num) {
  //1.创建一个栈结构 
  const stack = new Stack();
  //2.循环while
  while(num > 0) {
    let remainder = num % 2;  //获得到余数
    num = Math.floor(num / 2);//向下取整 直到num等于0
    stack.push(remainder);    //将余数压入栈
  }
  //返向拼接字符串
  let binString = "";//定义一个新的字符串用于反向拼接
  while(!stack.isEmpty()) {//循环直到栈为空栈
    binString += stack.pop();//移出顶栈元素到字符串中 进行拼接
  }
  //返回获取的字符串
  return binString;
}